/*
* Copyright (C) 2014 IUH �yber$oft Team
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package vn.cybersoft.obs.android.activities;
import vn.cybersoft.obs.android.R;
import vn.cybersoft.obs.android.fragments.AboutFragment;
import vn.cybersoft.obs.android.fragments.BatteryInfoFragment;
import vn.cybersoft.obs.android.fragments.ChargeFragment;
import vn.cybersoft.obs.android.fragments.ConsumptionFragment;
import vn.cybersoft.obs.android.fragments.MainMenuFragment;
import vn.cybersoft.obs.android.fragments.OptimizationFragment;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentManager.BackStackEntry;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
public class MainActivity extends BaseActivity {
private static final String t = "MainActivity";
public static enum ScreenList {
BATTERY_INFO,
OPTIMIZATION,
CHARGE,
CONSUMPTION,
ABOUT
};
// tags for retained context
private static final String CURRENT_FRAGMENT = "currentFragment";
private ScreenList currentFragment = ScreenList.BATTERY_INFO;
public MainActivity() {
super(R.string.app_name);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(null != savedInstanceState) {
currentFragment = ScreenList.valueOf(savedInstanceState.containsKey(CURRENT_FRAGMENT) ?
savedInstanceState.getString(CURRENT_FRAGMENT) : currentFragment.name());
}
// set the Behind View
setBehindContentView(R.layout.behind_layout);
getSupportFragmentManager().beginTransaction()
.replace(R.id.behind_content, new MainMenuFragment())
.commit();
setContentView(R.layout.main_layout);
// customize the SlidingMenu
getSlidingMenu().setMode(SlidingMenu.LEFT);
getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
setSlidingActionBarEnabled(false);
}
@Override
protected void onStart() {
super.onStart();
FragmentManager fragmentManager = getSupportFragmentManager();
if(fragmentManager.getBackStackEntryCount() == 0) {
swapToFragmentView(currentFragment);
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(CURRENT_FRAGMENT, currentFragment.name());
}
@Override
public void onBackPressed() {
FragmentManager mgr = getSupportFragmentManager();
int idxLast = mgr.getBackStackEntryCount() - 2;
if(idxLast < 0) {
this.setResult(RESULT_OK);
finish();
} else {
BackStackEntry entry = mgr.getBackStackEntryAt(idxLast);
swapToFragmentView(ScreenList.valueOf(entry.getName()));
}
}
public void swapToFragmentView(ScreenList newFragment) {
Log.i(t, "swapToFragmentView: " + newFragment.toString());
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment fragment = null;
if(ScreenList.BATTERY_INFO == newFragment) {
fragment = fragmentManager.findFragmentById(BatteryInfoFragment.LAYOUT_ID);
if(null == fragment) {
fragment = new BatteryInfoFragment();
}
} else if(ScreenList.OPTIMIZATION == newFragment) {
fragment = fragmentManager.findFragmentById(OptimizationFragment.LAYOUT_ID);
if(null == fragment) {
fragment = new OptimizationFragment();
}
} else if(ScreenList.CHARGE == newFragment) {
fragment = fragmentManager.findFragmentById(ChargeFragment.LAYOUT_ID);
if(null == fragment) {
fragment = new ChargeFragment();
}
} else if(ScreenList.CONSUMPTION == newFragment) {
fragment = fragmentManager.findFragmentById(ConsumptionFragment.LAYOUT_ID);
if(null == fragment) {
fragment = new ConsumptionFragment();
}
} else if(ScreenList.ABOUT == newFragment) {
fragment = fragmentManager.findFragmentById(AboutFragment.LAYOUT_ID);
if(null == fragment) {
fragment = new AboutFragment();
}
} else {
throw new IllegalStateException("Unrecognized ScreenList type");
}
currentFragment = newFragment;
BackStackEntry entry = null;
for (int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
BackStackEntry e = fragmentManager.getBackStackEntryAt(i);
if (e.getName().equals(currentFragment.name())) {
entry = e;
break;
}
}
if(null != entry) {
// flush backward, including the screen want to go back to
//fragmentManager.popBackStackImmediate(currentFragment.name(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.popBackStack(currentFragment.name(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
// add transaction to show the screen we want
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_frame, fragment);
transaction.addToBackStack(currentFragment.name());
transaction.commit();
levelSafeInvalidateOptionsMenu();
}
/**
* Android Lint complains, but we are using Sherlock,
* so this does exist for down-level devices.
*/
@SuppressLint("NewApi")
private void levelSafeInvalidateOptionsMenu() {
invalidateOptionsMenu();
}
}